const cloud = require('wx-server-sdk');

// 云函数模板
// 部署：在 cloud-functions/login 文件夹右击选择 “上传并部署”

cloud.init();
const db = cloud.database();
const _ = db.command;

/**
 * 返回失败的结构信息
 */
function error(msg, code = 0) {
    if (msg instanceof Error) {
        code = msg.code || 0;
        msg = msg.message;
    }

    return {
        code: code,
        msg: msg
    };
}

/**
 * 返回成功的结构信息
 */
function success(data) {
    return {
        code: 1,
        msg: 'ok',
        data: data
    };
}
/**
 * 这个示例将经自动鉴权过的小程序用户 openid 返回给小程序端
 * 
 * event 参数包含
 * - 小程序端调用传入的 data
 * - 经过微信鉴权直接可信的用户唯一标识 openid 
 * 
 */
exports.main = (event, context) => {
    // console.log(event)
    // console.log(context)
    let result = null;
    const data = event.data;
    try {
        if (event.__ACTION__ === 'login') {
            return login(event, context);
        } else if (event.__ACTION__ === 'register') {
            return register(event, context);
        } else if (event.__ACTION__ === 'repassowrd') {
            return repassowrd(event, context);
        }
    } catch (e) {
        return error(e);
    }

    return error('接口未实现！', 404);
}
/**
 * 登录
 */
function login(event, context) {
    if (!event.user) throw new Error('必须输入账号');
    if (!event.password) throw new Error('必须输入密码');

    return db.collection('user').where({
        mobile: event.user
    }).limit(1).get().then((res) => {
        let userInfo = res.data[0];
        if (!userInfo) throw new Error('账号不存在！');

        if (userInfo.password !== event.password) {
            throw new Error(error('账号或密码不正确！'));
        }
        delete userInfo.password;

        return success(userInfo);
    }).catch((e) => {
        return error(e.message);
    });
}

/**
 * 注册
 */
function register(event, context) {
    if (!event.user) throw new Error('请输入账号');
    if (!event.password) throw new Error('请输入密码');
    if (!event.repassword) throw new Error('请重复输入密码');
    if (event.repassword != event.password) throw new Error('两次密码不一样');

    return db.collection('user').where(_.or([{
        mobile: event.user
    }, {
        _openid: event.userInfo.openId
    }])).limit(1).get().then((res) => {
        const userInfo = res.data[0];
        if (userInfo) {
            if (userInfo._openid === event.userInfo.openId) {
                throw new Error('每个微信号只能注册一个账号！');
            }
            throw new Error('账号已存在！');
        }

        //添加到数据库中
        return db.collection('user').add({
            data: {
                _openid: event.userInfo.openId,
                mobile: event.user,
                password: event.password,
            }
        });
    }).then(() => {
        return success({
            user: event.user,
            password: event.password
        });
    }).catch((e) => {
        return error(e.message);
    });
}

/**
 * 修改密码
 */
function repassowrd(event, context) {
    if (!event.oldpassword) throw new Error('请输入旧密码');
    if (!event.password) throw new Error('请输入密码');
    if (!event.repassword) throw new Error('请重复输入密码');
    if (event.repassword != event.password) throw new Error('两次密码不一样');

    return db.collection('user').where({
        _openid: event.userInfo.openId
    }).limit(1).get().then((res) => {
        const userInfo = res.data[0];
        if (!userInfo) throw new Error('账号不存在！');

        if (userInfo.password !== event.oldpassword) {
            throw new Error('旧密码不正确');
        }

        //添加到数据库中
        return db.collection('user').where({
            _openid: event.userInfo.openId
        }).update({
            data: {
                password: event.password,
            }
        });
    }).then(() => {
        return success({
            password: event.password
        });
    }).catch((e) => {
        return error(e.message);
    });

}